home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / pascal / oop55.zip / SCREEN.PAS < prev    next >
Pascal/Delphi Source File  |  1989-05-02  |  3KB  |  200 lines

  1.  
  2. { Copyright (c) 1989 by Borland International, Inc. }
  3.  
  4. unit Screen;
  5. { Turbo Pascal 5.5 object-oriented example.
  6.   See BREAKOUT.PAS.
  7.  This unit provides several objects for dealing with the screen.
  8. }
  9.  
  10. interface
  11.  
  12. uses Crt, Dos;
  13.  
  14. type
  15.   Location = object
  16.     X, Y : Integer;
  17.     Visible : Boolean;
  18.     constructor Init(InitX, InitY : Integer);
  19.     procedure Relocate(NewX, NewY : Integer);
  20.     procedure MoveTo(NewX, NewY : Integer); virtual;
  21.     procedure Show; virtual;
  22.     procedure Hide; virtual;
  23.     function GetX : Integer;
  24.     function GetY : Integer;
  25.     function IsVisible : Boolean;
  26.   end;
  27.  
  28.   Cursor = object(Location)
  29.     OldCursor : Integer;
  30.     TempCursor : Integer;
  31.     constructor Init;
  32.     procedure Show; virtual;
  33.     procedure Hide; virtual;
  34.     procedure SetCursor(NewCursor : Integer);
  35.     function GetCursor : Integer;
  36.     procedure MoveTo(NewX, NewY : Integer); virtual;
  37.     procedure Save;
  38.     procedure Restore;
  39.     procedure Speedup;
  40.     procedure Slowdown;
  41.   end;
  42.  
  43.   SaveScreen = object(Cursor)
  44.     OldAttr   : Byte;
  45.     constructor Init;
  46.     procedure Save;
  47.     procedure Restore;
  48.   end;
  49.  
  50. implementation
  51.  
  52. procedure SetCursorSpeed(NewSpeed : Word);
  53. begin
  54.   Port[$60] := $F3;
  55.   Delay(200);
  56.   Port[$60] := NewSpeed;
  57. end;
  58.  
  59. constructor Location.Init(InitX, InitY : Integer);
  60. begin
  61.   X := InitX;
  62.   Y := InitY;
  63.   Visible := False;
  64. end;
  65.  
  66. procedure Location.Relocate(NewX, NewY : Integer);
  67. begin
  68.   X := NewX;
  69.   Y := NewY;
  70. end;
  71.  
  72. procedure Location.MoveTo(NewX, NewY : Integer);
  73. var
  74.   Vis : Boolean;
  75. begin
  76.   Vis := Visible;
  77.   if Vis then Hide;
  78.   X := NewX;
  79.   Y := NewY;
  80.   if Vis then Show;
  81. end;
  82.  
  83. procedure Location.Show;
  84. begin
  85.   Visible := True;
  86. end;
  87.  
  88. procedure Location.Hide;
  89. begin
  90.   Visible := False;
  91. end;
  92.  
  93. function Location.GetX : Integer;
  94. begin
  95.   GetX := X;
  96. end;
  97.  
  98. function Location.GetY : Integer;
  99. begin
  100.   GetY := Y;
  101. end;
  102.  
  103. function Location.IsVisible;
  104. begin
  105.   IsVisible := Visible;
  106. end;
  107.  
  108. constructor Cursor.Init;
  109. begin
  110.   Location.Init(WhereX, WhereY);
  111.   OldCursor := GetCursor;
  112.   Location.Show;
  113. end;
  114.  
  115. procedure Cursor.Show;
  116. begin
  117.   SetCursor(TempCursor);
  118. end;
  119.  
  120. procedure Cursor.Hide;
  121. begin
  122.   TempCursor := GetCursor;
  123.   SetCursor($2000);
  124. end;
  125.  
  126. function Cursor.GetCursor : Integer;
  127. var
  128.   Reg : Registers;
  129. begin
  130.   with Reg do
  131.   begin
  132.     AH := 3;
  133.     BH := 0;
  134.     Intr($10, Reg);
  135.     GetCursor := CX;
  136.   end;
  137. end;
  138.  
  139. procedure Cursor.SetCursor(NewCursor : Integer);
  140. var
  141.   Reg : Registers;
  142. begin
  143.   with Reg do
  144.   begin
  145.     AH := 1;
  146.     BH := 0;
  147.     CX := NewCursor;
  148.     Intr($10, Reg);
  149.   end;
  150. end;
  151.  
  152. procedure Cursor.MoveTo(NewX, NewY : Integer);
  153. begin
  154.   Location.Relocate(NewX, NewY);
  155.   GoToXY(NewX, NewY);
  156. end;
  157.  
  158. procedure Cursor.Save;
  159. begin
  160.   Location.Relocate(WhereX, WhereY);
  161.   OldCursor := GetCursor;
  162. end;
  163.  
  164. procedure Cursor.Restore;
  165. begin
  166.   SetCursor(OldCursor);
  167.   GoToXY(X, Y);
  168. end;
  169.  
  170. procedure Cursor.Speedup;
  171. begin
  172.   SetCursorSpeed(0);
  173. end;
  174.  
  175. procedure Cursor.Slowdown;
  176. begin
  177.   SetCursorSpeed($2C);
  178. end;
  179.  
  180. constructor SaveScreen.Init;
  181. begin
  182.   Cursor.Init;
  183.   OldAttr := TextAttr;
  184. end;
  185.  
  186. procedure SaveScreen.Save;
  187. begin
  188.   Cursor.Save;
  189.   OldAttr := TextAttr;
  190. end;
  191.  
  192. procedure SaveScreen.Restore;
  193. begin
  194.   Cursor.Restore;
  195.   TextAttr := OldAttr;
  196.   ClrScr;
  197. end;
  198.  
  199. end.
  200.